package fr.laas.gestionProjets.controlleurs;
import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;

import org.primefaces.model.DefaultTreeNode;

import fr.laas.gestionProjets.modeles.NoeudArbre;
import fr.laas.gestionProjets.services.ServiceArbre;
import fr.laas.gestionProjets.vues.VueHome;

@ManagedBean
@SessionScoped
public class GestionArbre implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	@ManagedProperty(value = "#{serviceArbre}")
	ServiceArbre serviceArbre;
	
	@ManagedProperty(value = "#{vueHome}")
	VueHome vueHome;
	
	public void rafraichirArbre(){
		
		NoeudArbre arbreTmp = serviceArbre.recupereArbre();
		
		DefaultTreeNode racine = new DefaultTreeNode(arbreTmp,null);
		
		for (NoeudArbre enfantTmp : arbreTmp.getEnfants()) {
			construireNoeud(racine,enfantTmp);
		}
		
		vueHome.setArbre(racine);
	}
	

	private void construireNoeud(DefaultTreeNode parent, NoeudArbre fils) {
		DefaultTreeNode nouveauNoeudFils = new DefaultTreeNode(fils,parent);
		
		// Deplier tous les noeuds
		nouveauNoeudFils.setExpanded(true);
		
		for (NoeudArbre filsTmp : fils.getEnfants()) {
			construireNoeud(nouveauNoeudFils,filsTmp);
		}
	}


	/**
	 * @return the serviceArbre
	 */
	public ServiceArbre getServiceArbre() {
		return serviceArbre;
	}

	/**
	 * @param serviceArbre the serviceArbre to set
	 */
	public void setServiceArbre(ServiceArbre serviceArbre) {
		this.serviceArbre = serviceArbre;
	}

	/**
	 * @return the vueHome
	 */
	public VueHome getVueHome() {
		return vueHome;
	}

	/**
	 * @param vueHome the vueHome to set
	 */
	public void setVueHome(VueHome vueHome) {
		this.vueHome = vueHome;
	}
	

}